package com.jingbian.cppccbackend.mapper.admin;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jingbian.cppccbackend.entity.ProposalAttachments;
import com.jingbian.cppccbackend.entity.Proposals;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 提案信息表 Mapper 接口
 * </p>
 *
 * @author yezi
 * @since 2025-02-11
 */
@Mapper
public interface adminProposalsMapper extends BaseMapper<Proposals> {

    /**
     * 查询某个提案的详情
     * @param proposalId 提案ID
     * @return Proposals 包含提案基本信息及提案人的电话、所属单位等信息
     */
    Proposals getProposalById(@Param("proposalId") Integer proposalId);


    /**
     * 管理员
     **/
    //    搜索框搜索
    List<Proposals> searchProposals(@Param("searchText") String searchText);

    /**
     * 【初审】查询所有用户的所有提案数据
     * @return List<Proposals>
     */
    List<Proposals> getAllProposalsWithDetails(String status, String proposalType, String startDate, String endDate ,String sort,  String department,String searchText,Integer pageStatus);

    /**
     * 修改提案状态
     * @param proposalId 提案ID
     * @param status 新状态
     * @param isOr 是否通过
     * @param pageStatus 页面状态
     * @param department 分流部门（仅分流时需要）
     */
    void updateProposalStatus(Integer proposalId, String status, Boolean isOr, Integer pageStatus, String department,String handing_result);
    //    退回
    void sendBack(Integer proposalId, String status, Boolean isOr, Integer pageStatus, String department);
    //    公示
    void publicity(Integer proposalId, String status, Boolean isOr);

    // 获取提案总数
    @Select("SELECT COUNT(*) FROM proposals")
    Integer getTotalProposals();

    // 获取昨日新增提案数
    @Select("SELECT COUNT(*) FROM proposals WHERE DATE(submit_time) = DATE_SUB(CURDATE(), INTERVAL 1 DAY)")
    Integer getNewProposalsYesterday();

    // 获取已完结提案数
    @Select("SELECT COUNT(*) FROM proposals WHERE status = '处理完结'")
    Integer getCompletedProposals();

    // 获取提案类型分布
    List<Map<String, Object>> getProposalTypeDistribution();

    // 获取提案提交趋势
    List<Map<String, Object>> getProposalTrend(String startDate, String endDate);

    void insertHandlingAttachment(ProposalAttachments attachment);

}